#!/usr/bin/env python2
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
import urllib,urllib2
import re
import json

class AspNetCore(BasicNewsRecipe):
    title = 'ASP.NET Core 简介'
    __author__ = 'Microsoft'
    description = '''ASP.NET Core 是一个跨平台的高性能开源框架，用于生成基于云且连接 Internet 的新式应用程序。 使用 ASP.NET Core，可以：
生成 Web 应用和服务、IoT 应用和移动后端。
在 Windows、macOS 和 Linux 上使用喜爱的开发工具。
部署到云或本地
在 .NET Core 或 .NET Framework 上运行。'''
    timefmt = '[%Y-%m-%d]'
    no_stylesheets = True
    INDEX = 'https://docs.microsoft.com/zh-cn/aspnet/core/'
    BASEURL = 'https://docs.microsoft.com/zh-cn/aspnet/core/'
    IndexUrl = 'https://docs.microsoft.com/zh-cn/aspnet/core/toc.json'
    auto_cleanup = True                   # 如果没有手动分析文章结构，可以考虑开启该选项自动清理正文内容
    remove_tags = [dict(attrs={'class': ['sxs-lookup']})]
    language = 'zh-CN'
    keep_only_tags = [{'id': ['main']}]  # 仅保留文章的post中的内容，其中为自己分析得到的正文范围
    max_articles_per_feed = 10000           # 默认最多文章数是100，可改为更大的数字以免下载不全

    def parse_json(self, item, result, baseUrl):
        if 'href' in item:
            link = item['href']
            title = item['toc_title']
            result.append({'url': baseUrl + link, 'title': title})
            #print('result:', result)
            if 'children' in item:
                for child in item['children']:
                    self.parse_json(child, result, baseUrl)

    def parse_index(self):
        html = urllib2.Request(self.IndexUrl)
        response = urllib2.urlopen(html)
        response = response.read()
        jsonIndex = json.loads(response)
        articles = []
        for item in jsonIndex["items"]:
            self.parse_json(item, articles, self.BASEURL)
         
        print('articles:', articles)
        res = [ (u'ASP.NET Core 简介', articles)]    # 返回tuple，分别是电子书名字和文章列表
        #self.abort_recipe_processing('test')  # 用来中断电子书生成，调试用
        return res